Escribí la función que tokeniza la expresión de cadena aritmética en una matriz de tokens, como números y operadores. Todo está bien, pero obtengo resultados extraños cuando trato con cadenas que contienen "10". Aquí está el código:
function tokenizeString(expressionString) { const tokenArray = []; let token = ""; for (let i = 0; i < expressionString.length; i++) { if (parseInt(expressionString[i])) { token += expressionString[i]; } else { tokenArray.push(parseInt(token)); token = ""; tokenArray.push(expressionString[i]); } } if (token !== "") { tokenArray.push(parseInt(token)); } return tokenArray; } console.log(tokenizeString("14+2/8")); // [14, "+", 2, "/", 8] console.log(tokenizeString("10+1")); // [1, '0', NaN, '-', 3] ??Por ahora no se me ocurre una idea de por qué sucede esto.
En lugar de parseInt en if(parseInt(expressionString[i])){} , podría usar isNaN() para verificar si la cadena es un número o no . isNaN() devuelve verdadero si no es un número, por lo que su if sería if (!isNaN(expressionString[i])){}
function tokenizeString(expressionString) { const tokenArray = []; let token = ""; for (let i = 0; i < expressionString.length; i++) { if (!isNaN(expressionString[i])) { token += expressionString[i]; } else { tokenArray.push(parseInt(token)); token = ""; tokenArray.push(expressionString[i]); } } if (token !== "") { tokenArray.push(parseInt(token)); } return tokenArray; } console.log(tokenizeString("14+2/8")); // [14, "+", 2, "/", 8] console.log(tokenizeString("10+1")); // [10, '+', 1] ??